package br.com.equus.bean;

import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.arquitetura.bean.PaginableBean;
import br.com.arquitetura.util.FacesMessagesUtil;
import br.com.arquitetura.util.Mascara;
import br.com.equus.entidade.Animal;
import br.com.equus.entidade.ControleReproducaoM;
import br.com.equus.entidade.Usuario;
import br.com.equus.util.Constantes;
import br.com.equus.util.ValidacaoUtil;

@ManagedBean(name = "controleReproducaoMBean")
@ViewScoped
public class ControleReproducaoMBean extends PaginableBean<ControleReproducaoM> {

	private static final long serialVersionUID = 1L;

	private Animal animal;

	public ControleReproducaoMBean() {
	}

	@PostConstruct
	public void carregarTela() {

		Integer idAnimal = (Integer) getSessionMap().remove("idAnimal");
		if (idAnimal != null) {
			animal = (Animal) universalManager.get(Animal.class, idAnimal);
		}
	}

	@SuppressWarnings("unchecked")
	public String limparTela() {
		getSessionMap().put("idAnimal", animal.getId());
		return redirect("controleReproducaoM.jsf");
	}

	@Override
	public String load() {
		super.load();
		getModel().setDosePalhetaToString(getModel().getDosePalheta().toString());
		getModel().setMotilidaProToString(getModel().getMotilidaPro().toString());
		getModel().setMotilidaProCongeladaToString(getModel().getMotilidaProCongelada().toString());
		getModel().setConcentracaoEspermaToString((getModel().getConcentracaoEsperma().toString()));
		return SUCCESS;
	}

	@Override
	public String save() {
		if (ValidacaoUtil.doubleValido(getModel().getDosePalhetaToString())) {
			getModel().setDosePalheta(Mascara.marcarDouble(getModel().getDosePalhetaToString()));
		} else {
			FacesMessagesUtil.addErrorMessage("Dose de Ejaculado ", " Está em um formato incorreto");
			return ERROR;
		}
		if (ValidacaoUtil.doubleValido(getModel().getMotilidaProToString())) {
			getModel().setMotilidaPro(Mascara.marcarDouble(getModel().getMotilidaProToString()));
		} else {
			FacesMessagesUtil.addErrorMessage("Motilidade % ", " Está em um formato incorreto");
			return ERROR;
		}
		if (ValidacaoUtil.doubleValido(getModel().getMotilidaProCongeladaToString())) {
			getModel().setMotilidaProCongelada(Mascara.marcarDouble(getModel().getMotilidaProCongeladaToString()));
		} else {
			FacesMessagesUtil.addErrorMessage("Motilidade Pós Desconge ", " Está em um formato incorreto");
			return ERROR;
		}
		if (getModel().getConcentracaoEspermaToString() != null && ValidacaoUtil.doubleValido(getModel().getConcentracaoEspermaToString())) {
			getModel().setConcentracaoEsperma(Mascara.marcarDouble(getModel().getConcentracaoEspermaToString()));
		} else if (getModel().getConcentracaoEspermaToString() != null) {
			FacesMessagesUtil.addErrorMessage("Concentração espermática ", " Está em um formato incorreto");
			return ERROR;
		}

		Usuario userLogado = (Usuario) getSessionMap().get(Constantes.USUARIO_SESSAO);
		getModel().setUsuario(new Usuario(userLogado.getId()));

		getModel().setAnimal(new Animal(animal.getId()));

		System.out.println(getModel());
		return super.save();
	}

	@Override
	public void verificarAcesso() {
		acessoBean.bloquearTela("ROLE_REPRO_M");

	}

	@Override
	public ControleReproducaoM createModel() {
		return new ControleReproducaoM();
	}

	@Override
	public String getQualifiedName() {
		return "Controle de Reprodução";
	}

	@Override
	public boolean isFeminino() {
		return false;
	}

	@Override
	public Map<String, String> getFilters() {
		if (animal != null && animal.getId() != null) {
			this.filters.put("animal.id", animal.getId().toString());
		} else {
			this.filters.put("animal.id", "0");
		}
		return this.filters;
	}

	public Animal getAnimal() {
		return animal;
	}

	public void setAnimal(Animal animal) {
		this.animal = animal;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

}
